//
// Created by jiangpenghui on 2023/4/10.
//

#ifndef CMAKECXX_CONTAINER_H
#define CMAKECXX_CONTAINER_H

#include <cstring>


template<class T, template<class U> class Seq>
class Container {
    // Seq 是一个模板
    Seq<T> seq;

public:
    void append(const T &t) {
        seq.push_back(t);
    }

    T *begin() {
        return seq.begin();
    }

    T *end() {
        return seq.end();
    }
};

// 函数模板重载 通过参数重载
template<typename T>
const T &min(const T &a, const T &b) {
    return (a < b) ? a : b;
}

const char *min(const char *a, const char *b) {
    return (strcmp(a, b) < 0) ? a : b;
}

template<typename T>
void f(T *) {}

// 将f作为h函数的入参  void 返回值类型，*pf 指定模板函数签名，(int *) 模板函数入参类型
// h(&f<int>);  h(&f)
void h(void (*pf)(int *)) {}

// 定义函数g模板
template<typename T>
void g(void (*pf)(T *)) {}

// g<int>(&f<int>)

#endif //CMAKECXX_CONTAINER_H
